﻿using System;
using System.Collections.Generic;

namespace WUDI.ECharts.Series.Tree.Data
{
	/// <summary>
	/// Object
	/// series-tree.data 的数据格式是树状结构的，例如：
	/// { // 注意，最外层是一个对象，代表树的根节点
	///     name: "flare",    // 节点的名称，当前节点 label 对应的文本
	///     label: {          // 此节点特殊的 label 配置（如果需要的话）。
	///         ...           // label的格式参见 series-tree.label。
	///     },
	///     itemStyle: {      // 此节点特殊的 itemStyle 配置（如果需要的话）。
	///         ...           // label的格式参见 series-tree.itemStyle。
	///     },
	///     children: [
	///         {
	///             name: "flex",
	///             value: 4116,    // value 值，只在 tooltip 中显示
	///             label: {
	///                 ...
	///             },
	///             itemStyle: {
	///                 ...
	///             },
	///             collapsed: null, // 如果为 true，表示此节点默认折叠。
	///             children: [...] // 叶子节点没有 children, 可以不写
	///         },
	///         ...
	///     ]
	/// };
	/// </summary>
	public class Data
	{

		/// <summary>
		/// string
		/// 树节点的名称，用来标识每一个节点。
		/// </summary>
		public String name { get; set; }

		/// <summary>
		/// number
		/// 节点的值，在 tooltip 中显示。
		/// </summary>
		public int? value { get; set; }

		/// <summary>
		/// Object
		/// 该节点的样式。
		/// </summary>
		public WUDI.ECharts.Series.Tree.Data.ItemStyle.ItemStyle itemStyle { get; set; }

		/// <summary>
		/// Object
		/// 该节点的标签。
		/// </summary>
		public WUDI.ECharts.Series.Tree.Data.Label.Label label { get; set; }

		/// <summary>
		/// Object
		/// 高亮的节点样式
		/// </summary>
		public WUDI.ECharts.Series.Tree.Data.Emphasis.Emphasis emphasis { get; set; }

		/// <summary>
		/// *
		/// 本系列每个数据项中特定的 tooltip 设定。
		/// </summary>
		public WUDI.ECharts.Series.Tree.Data.Tooltip.Tooltip tooltip { get; set; }

		/// <summary>
		/// boolean
		/// 是否开启动画。
		/// </summary>
		public Boolean animation { get; set; } = true;

		/// <summary>
		/// number
		/// 是否开启动画的阈值，当单个系列显示的图形数量大于这个阈值时会关闭动画。
		/// </summary>
		public int animationThreshold { get; set; } = 2000;

		/// <summary>
		/// number
		/// 初始动画的时长，支持回调函数，可以通过每个数据返回不同的 delay 时间实现更戏剧的初始动画效果：
		/// animationDuration: function (idx) {
		///     // 越往后的数据延迟越大
		///     return idx * 100;
		/// }
		/// </summary>
		public int animationDuration { get; set; } = 1000;

		/// <summary>
		/// string
		/// 初始动画的缓动效果。不同的缓动效果可以参考 缓动示例。
		/// </summary>
		public String animationEasing { get; set; } = "linear";

		/// <summary>
		/// number,Function
		/// 初始动画的延迟，支持回调函数，可以通过每个数据返回不同的 delay 时间实现更戏剧的初始动画效果。
		/// 如下示例：
		/// animationDelay: function (idx) {
		///     // 越往后的数据延迟越大
		///     return idx * 100;
		/// }
		/// 也可以看该示例
		/// </summary>
		public dynamic animationDelay { get; set; } = 0;

		/// <summary>
		/// number,Function
		/// 数据更新动画的时长。
		/// 支持回调函数，可以通过每个数据返回不同的 delay 时间实现更戏剧的更新动画效果：
		/// animationDurationUpdate: function (idx) {
		///     // 越往后的数据延迟越大
		///     return idx * 100;
		/// }
		/// </summary>
		public dynamic animationDurationUpdate { get; set; } = 300;

		/// <summary>
		/// string
		/// 数据更新动画的缓动效果。
		/// </summary>
		public String animationEasingUpdate { get; set; } = "cubicOut";

		/// <summary>
		/// number,Function
		/// 数据更新动画的延迟，支持回调函数，可以通过每个数据返回不同的 delay 时间实现更戏剧的更新动画效果。
		/// 如下示例：
		/// animationDelayUpdate: function (idx) {
		///     // 越往后的数据延迟越大
		///     return idx * 100;
		/// }
		/// 也可以看该示例
		/// </summary>
		public dynamic animationDelayUpdate { get; set; } = 0;

	}
}
